/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.hl7.v3.impl;

import java.util.Collection;
import java.util.List;

import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;

import org.eclipse.emf.common.util.EList;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;

import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;

import org.eclipse.emf.ecore.util.BasicFeatureMap;
import org.eclipse.emf.ecore.util.FeatureMap;
import org.eclipse.emf.ecore.util.InternalEList;

import org.hl7.v3.AlignType1;
import org.hl7.v3.ScopeType1;
import org.hl7.v3.StrucDocBr;
import org.hl7.v3.StrucDocContent;
import org.hl7.v3.StrucDocFootnote;
import org.hl7.v3.StrucDocFootnoteRef;
import org.hl7.v3.StrucDocLinkHtml;
import org.hl7.v3.StrucDocRenderMultiMedia;
import org.hl7.v3.StrucDocSub;
import org.hl7.v3.StrucDocSup;
import org.hl7.v3.StrucDocTh;
import org.hl7.v3.V3Package;
import org.hl7.v3.ValignType;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Struc Doc Th</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getMixed <em>Mixed</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getGroup <em>Group</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getContent <em>Content</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getLinkHtml <em>Link Html</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getSub <em>Sub</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getSup <em>Sup</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getBr <em>Br</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getFootnote <em>Footnote</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getFootnoteRef <em>Footnote Ref</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getRenderMultiMedia <em>Render Multi Media</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getAbbr <em>Abbr</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getAlign <em>Align</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getAxis <em>Axis</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getChar <em>Char</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getCharoff <em>Charoff</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getColspan <em>Colspan</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getHeaders <em>Headers</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getID <em>ID</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getLanguage <em>Language</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getRowspan <em>Rowspan</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getScope <em>Scope</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getStyleCode <em>Style Code</em>}</li>
 *   <li>{@link org.hl7.v3.impl.StrucDocThImpl#getValign <em>Valign</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class StrucDocThImpl extends EObjectImpl implements StrucDocTh {
	/**
	 * The cached value of the '{@link #getMixed() <em>Mixed</em>}' attribute list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMixed()
	 * @generated
	 * @ordered
	 */
	protected FeatureMap mixed;

	/**
	 * The default value of the '{@link #getAbbr() <em>Abbr</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAbbr()
	 * @generated
	 * @ordered
	 */
	protected static final String ABBR_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getAbbr() <em>Abbr</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAbbr()
	 * @generated
	 * @ordered
	 */
	protected String abbr = ABBR_EDEFAULT;

	/**
	 * The default value of the '{@link #getAlign() <em>Align</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAlign()
	 * @generated
	 * @ordered
	 */
	protected static final AlignType1 ALIGN_EDEFAULT = AlignType1.LEFT;

	/**
	 * The cached value of the '{@link #getAlign() <em>Align</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAlign()
	 * @generated
	 * @ordered
	 */
	protected AlignType1 align = ALIGN_EDEFAULT;

	/**
	 * This is true if the Align attribute has been set.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 * @ordered
	 */
	protected boolean alignESet;

	/**
	 * The default value of the '{@link #getAxis() <em>Axis</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAxis()
	 * @generated
	 * @ordered
	 */
	protected static final String AXIS_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getAxis() <em>Axis</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAxis()
	 * @generated
	 * @ordered
	 */
	protected String axis = AXIS_EDEFAULT;

	/**
	 * The default value of the '{@link #getChar() <em>Char</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getChar()
	 * @generated
	 * @ordered
	 */
	protected static final String CHAR_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getChar() <em>Char</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getChar()
	 * @generated
	 * @ordered
	 */
	protected String char_ = CHAR_EDEFAULT;

	/**
	 * The default value of the '{@link #getCharoff() <em>Charoff</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getCharoff()
	 * @generated
	 * @ordered
	 */
	protected static final String CHAROFF_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getCharoff() <em>Charoff</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getCharoff()
	 * @generated
	 * @ordered
	 */
	protected String charoff = CHAROFF_EDEFAULT;

	/**
	 * The default value of the '{@link #getColspan() <em>Colspan</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getColspan()
	 * @generated
	 * @ordered
	 */
	protected static final String COLSPAN_EDEFAULT = "1";

	/**
	 * The cached value of the '{@link #getColspan() <em>Colspan</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getColspan()
	 * @generated
	 * @ordered
	 */
	protected String colspan = COLSPAN_EDEFAULT;

	/**
	 * This is true if the Colspan attribute has been set.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 * @ordered
	 */
	protected boolean colspanESet;

	/**
	 * The default value of the '{@link #getHeaders() <em>Headers</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeaders()
	 * @generated
	 * @ordered
	 */
	protected static final List<String> HEADERS_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getHeaders() <em>Headers</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeaders()
	 * @generated
	 * @ordered
	 */
	protected List<String> headers = HEADERS_EDEFAULT;

	/**
	 * The default value of the '{@link #getID() <em>ID</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getID()
	 * @generated
	 * @ordered
	 */
	protected static final String ID_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getID() <em>ID</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getID()
	 * @generated
	 * @ordered
	 */
	protected String iD = ID_EDEFAULT;

	/**
	 * The default value of the '{@link #getLanguage() <em>Language</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getLanguage()
	 * @generated
	 * @ordered
	 */
	protected static final String LANGUAGE_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getLanguage() <em>Language</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getLanguage()
	 * @generated
	 * @ordered
	 */
	protected String language = LANGUAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getRowspan() <em>Rowspan</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getRowspan()
	 * @generated
	 * @ordered
	 */
	protected static final String ROWSPAN_EDEFAULT = "1";

	/**
	 * The cached value of the '{@link #getRowspan() <em>Rowspan</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getRowspan()
	 * @generated
	 * @ordered
	 */
	protected String rowspan = ROWSPAN_EDEFAULT;

	/**
	 * This is true if the Rowspan attribute has been set.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 * @ordered
	 */
	protected boolean rowspanESet;

	/**
	 * The default value of the '{@link #getScope() <em>Scope</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScope()
	 * @generated
	 * @ordered
	 */
	protected static final ScopeType1 SCOPE_EDEFAULT = ScopeType1.ROW;

	/**
	 * The cached value of the '{@link #getScope() <em>Scope</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScope()
	 * @generated
	 * @ordered
	 */
	protected ScopeType1 scope = SCOPE_EDEFAULT;

	/**
	 * This is true if the Scope attribute has been set.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 * @ordered
	 */
	protected boolean scopeESet;

	/**
	 * The default value of the '{@link #getStyleCode() <em>Style Code</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getStyleCode()
	 * @generated
	 * @ordered
	 */
	protected static final List<String> STYLE_CODE_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getStyleCode() <em>Style Code</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getStyleCode()
	 * @generated
	 * @ordered
	 */
	protected List<String> styleCode = STYLE_CODE_EDEFAULT;

	/**
	 * The default value of the '{@link #getValign() <em>Valign</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getValign()
	 * @generated
	 * @ordered
	 */
	protected static final ValignType VALIGN_EDEFAULT = ValignType.TOP;

	/**
	 * The cached value of the '{@link #getValign() <em>Valign</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getValign()
	 * @generated
	 * @ordered
	 */
	protected ValignType valign = VALIGN_EDEFAULT;

	/**
	 * This is true if the Valign attribute has been set.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 * @ordered
	 */
	protected boolean valignESet;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected StrucDocThImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return V3Package.eINSTANCE.getStrucDocTh();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public FeatureMap getMixed() {
		if (mixed == null) {
			mixed = new BasicFeatureMap(this, V3Package.STRUC_DOC_TH__MIXED);
		}
		return mixed;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public FeatureMap getGroup() {
		return (FeatureMap)getMixed().<FeatureMap.Entry>list(V3Package.eINSTANCE.getStrucDocTh_Group());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<StrucDocContent> getContent() {
		return getGroup().list(V3Package.eINSTANCE.getStrucDocTh_Content());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<StrucDocLinkHtml> getLinkHtml() {
		return getGroup().list(V3Package.eINSTANCE.getStrucDocTh_LinkHtml());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<StrucDocSub> getSub() {
		return getGroup().list(V3Package.eINSTANCE.getStrucDocTh_Sub());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<StrucDocSup> getSup() {
		return getGroup().list(V3Package.eINSTANCE.getStrucDocTh_Sup());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<StrucDocBr> getBr() {
		return getGroup().list(V3Package.eINSTANCE.getStrucDocTh_Br());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<StrucDocFootnote> getFootnote() {
		return getGroup().list(V3Package.eINSTANCE.getStrucDocTh_Footnote());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<StrucDocFootnoteRef> getFootnoteRef() {
		return getGroup().list(V3Package.eINSTANCE.getStrucDocTh_FootnoteRef());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<StrucDocRenderMultiMedia> getRenderMultiMedia() {
		return getGroup().list(V3Package.eINSTANCE.getStrucDocTh_RenderMultiMedia());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getAbbr() {
		return abbr;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAbbr(String newAbbr) {
		String oldAbbr = abbr;
		abbr = newAbbr;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__ABBR, oldAbbr, abbr));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public AlignType1 getAlign() {
		return align;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAlign(AlignType1 newAlign) {
		AlignType1 oldAlign = align;
		align = newAlign == null ? ALIGN_EDEFAULT : newAlign;
		boolean oldAlignESet = alignESet;
		alignESet = true;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__ALIGN, oldAlign, align, !oldAlignESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void unsetAlign() {
		AlignType1 oldAlign = align;
		boolean oldAlignESet = alignESet;
		align = ALIGN_EDEFAULT;
		alignESet = false;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.UNSET, V3Package.STRUC_DOC_TH__ALIGN, oldAlign, ALIGN_EDEFAULT, oldAlignESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public boolean isSetAlign() {
		return alignESet;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getAxis() {
		return axis;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAxis(String newAxis) {
		String oldAxis = axis;
		axis = newAxis;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__AXIS, oldAxis, axis));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getChar() {
		return char_;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setChar(String newChar) {
		String oldChar = char_;
		char_ = newChar;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__CHAR, oldChar, char_));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getCharoff() {
		return charoff;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setCharoff(String newCharoff) {
		String oldCharoff = charoff;
		charoff = newCharoff;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__CHAROFF, oldCharoff, charoff));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getColspan() {
		return colspan;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setColspan(String newColspan) {
		String oldColspan = colspan;
		colspan = newColspan;
		boolean oldColspanESet = colspanESet;
		colspanESet = true;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__COLSPAN, oldColspan, colspan, !oldColspanESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void unsetColspan() {
		String oldColspan = colspan;
		boolean oldColspanESet = colspanESet;
		colspan = COLSPAN_EDEFAULT;
		colspanESet = false;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.UNSET, V3Package.STRUC_DOC_TH__COLSPAN, oldColspan, COLSPAN_EDEFAULT, oldColspanESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public boolean isSetColspan() {
		return colspanESet;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public List<String> getHeaders() {
		return headers;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setHeaders(List<String> newHeaders) {
		List<String> oldHeaders = headers;
		headers = newHeaders;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__HEADERS, oldHeaders, headers));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getID() {
		return iD;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setID(String newID) {
		String oldID = iD;
		iD = newID;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__ID, oldID, iD));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getLanguage() {
		return language;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setLanguage(String newLanguage) {
		String oldLanguage = language;
		language = newLanguage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__LANGUAGE, oldLanguage, language));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getRowspan() {
		return rowspan;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setRowspan(String newRowspan) {
		String oldRowspan = rowspan;
		rowspan = newRowspan;
		boolean oldRowspanESet = rowspanESet;
		rowspanESet = true;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__ROWSPAN, oldRowspan, rowspan, !oldRowspanESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void unsetRowspan() {
		String oldRowspan = rowspan;
		boolean oldRowspanESet = rowspanESet;
		rowspan = ROWSPAN_EDEFAULT;
		rowspanESet = false;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.UNSET, V3Package.STRUC_DOC_TH__ROWSPAN, oldRowspan, ROWSPAN_EDEFAULT, oldRowspanESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public boolean isSetRowspan() {
		return rowspanESet;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ScopeType1 getScope() {
		return scope;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setScope(ScopeType1 newScope) {
		ScopeType1 oldScope = scope;
		scope = newScope == null ? SCOPE_EDEFAULT : newScope;
		boolean oldScopeESet = scopeESet;
		scopeESet = true;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__SCOPE, oldScope, scope, !oldScopeESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void unsetScope() {
		ScopeType1 oldScope = scope;
		boolean oldScopeESet = scopeESet;
		scope = SCOPE_EDEFAULT;
		scopeESet = false;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.UNSET, V3Package.STRUC_DOC_TH__SCOPE, oldScope, SCOPE_EDEFAULT, oldScopeESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public boolean isSetScope() {
		return scopeESet;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public List<String> getStyleCode() {
		return styleCode;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setStyleCode(List<String> newStyleCode) {
		List<String> oldStyleCode = styleCode;
		styleCode = newStyleCode;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__STYLE_CODE, oldStyleCode, styleCode));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ValignType getValign() {
		return valign;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setValign(ValignType newValign) {
		ValignType oldValign = valign;
		valign = newValign == null ? VALIGN_EDEFAULT : newValign;
		boolean oldValignESet = valignESet;
		valignESet = true;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, V3Package.STRUC_DOC_TH__VALIGN, oldValign, valign, !oldValignESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void unsetValign() {
		ValignType oldValign = valign;
		boolean oldValignESet = valignESet;
		valign = VALIGN_EDEFAULT;
		valignESet = false;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.UNSET, V3Package.STRUC_DOC_TH__VALIGN, oldValign, VALIGN_EDEFAULT, oldValignESet));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public boolean isSetValign() {
		return valignESet;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
		switch (featureID) {
			case V3Package.STRUC_DOC_TH__MIXED:
				return ((InternalEList<?>)getMixed()).basicRemove(otherEnd, msgs);
			case V3Package.STRUC_DOC_TH__GROUP:
				return ((InternalEList<?>)getGroup()).basicRemove(otherEnd, msgs);
			case V3Package.STRUC_DOC_TH__CONTENT:
				return ((InternalEList<?>)getContent()).basicRemove(otherEnd, msgs);
			case V3Package.STRUC_DOC_TH__LINK_HTML:
				return ((InternalEList<?>)getLinkHtml()).basicRemove(otherEnd, msgs);
			case V3Package.STRUC_DOC_TH__SUB:
				return ((InternalEList<?>)getSub()).basicRemove(otherEnd, msgs);
			case V3Package.STRUC_DOC_TH__SUP:
				return ((InternalEList<?>)getSup()).basicRemove(otherEnd, msgs);
			case V3Package.STRUC_DOC_TH__BR:
				return ((InternalEList<?>)getBr()).basicRemove(otherEnd, msgs);
			case V3Package.STRUC_DOC_TH__FOOTNOTE:
				return ((InternalEList<?>)getFootnote()).basicRemove(otherEnd, msgs);
			case V3Package.STRUC_DOC_TH__FOOTNOTE_REF:
				return ((InternalEList<?>)getFootnoteRef()).basicRemove(otherEnd, msgs);
			case V3Package.STRUC_DOC_TH__RENDER_MULTI_MEDIA:
				return ((InternalEList<?>)getRenderMultiMedia()).basicRemove(otherEnd, msgs);
		}
		return super.eInverseRemove(otherEnd, featureID, msgs);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case V3Package.STRUC_DOC_TH__MIXED:
				if (coreType) return getMixed();
				return ((FeatureMap.Internal)getMixed()).getWrapper();
			case V3Package.STRUC_DOC_TH__GROUP:
				if (coreType) return getGroup();
				return ((FeatureMap.Internal)getGroup()).getWrapper();
			case V3Package.STRUC_DOC_TH__CONTENT:
				return getContent();
			case V3Package.STRUC_DOC_TH__LINK_HTML:
				return getLinkHtml();
			case V3Package.STRUC_DOC_TH__SUB:
				return getSub();
			case V3Package.STRUC_DOC_TH__SUP:
				return getSup();
			case V3Package.STRUC_DOC_TH__BR:
				return getBr();
			case V3Package.STRUC_DOC_TH__FOOTNOTE:
				return getFootnote();
			case V3Package.STRUC_DOC_TH__FOOTNOTE_REF:
				return getFootnoteRef();
			case V3Package.STRUC_DOC_TH__RENDER_MULTI_MEDIA:
				return getRenderMultiMedia();
			case V3Package.STRUC_DOC_TH__ABBR:
				return getAbbr();
			case V3Package.STRUC_DOC_TH__ALIGN:
				return getAlign();
			case V3Package.STRUC_DOC_TH__AXIS:
				return getAxis();
			case V3Package.STRUC_DOC_TH__CHAR:
				return getChar();
			case V3Package.STRUC_DOC_TH__CHAROFF:
				return getCharoff();
			case V3Package.STRUC_DOC_TH__COLSPAN:
				return getColspan();
			case V3Package.STRUC_DOC_TH__HEADERS:
				return getHeaders();
			case V3Package.STRUC_DOC_TH__ID:
				return getID();
			case V3Package.STRUC_DOC_TH__LANGUAGE:
				return getLanguage();
			case V3Package.STRUC_DOC_TH__ROWSPAN:
				return getRowspan();
			case V3Package.STRUC_DOC_TH__SCOPE:
				return getScope();
			case V3Package.STRUC_DOC_TH__STYLE_CODE:
				return getStyleCode();
			case V3Package.STRUC_DOC_TH__VALIGN:
				return getValign();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case V3Package.STRUC_DOC_TH__MIXED:
				((FeatureMap.Internal)getMixed()).set(newValue);
				return;
			case V3Package.STRUC_DOC_TH__GROUP:
				((FeatureMap.Internal)getGroup()).set(newValue);
				return;
			case V3Package.STRUC_DOC_TH__CONTENT:
				getContent().clear();
				getContent().addAll((Collection<? extends StrucDocContent>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__LINK_HTML:
				getLinkHtml().clear();
				getLinkHtml().addAll((Collection<? extends StrucDocLinkHtml>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__SUB:
				getSub().clear();
				getSub().addAll((Collection<? extends StrucDocSub>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__SUP:
				getSup().clear();
				getSup().addAll((Collection<? extends StrucDocSup>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__BR:
				getBr().clear();
				getBr().addAll((Collection<? extends StrucDocBr>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__FOOTNOTE:
				getFootnote().clear();
				getFootnote().addAll((Collection<? extends StrucDocFootnote>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__FOOTNOTE_REF:
				getFootnoteRef().clear();
				getFootnoteRef().addAll((Collection<? extends StrucDocFootnoteRef>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__RENDER_MULTI_MEDIA:
				getRenderMultiMedia().clear();
				getRenderMultiMedia().addAll((Collection<? extends StrucDocRenderMultiMedia>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__ABBR:
				setAbbr((String)newValue);
				return;
			case V3Package.STRUC_DOC_TH__ALIGN:
				setAlign((AlignType1)newValue);
				return;
			case V3Package.STRUC_DOC_TH__AXIS:
				setAxis((String)newValue);
				return;
			case V3Package.STRUC_DOC_TH__CHAR:
				setChar((String)newValue);
				return;
			case V3Package.STRUC_DOC_TH__CHAROFF:
				setCharoff((String)newValue);
				return;
			case V3Package.STRUC_DOC_TH__COLSPAN:
				setColspan((String)newValue);
				return;
			case V3Package.STRUC_DOC_TH__HEADERS:
				setHeaders((List<String>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__ID:
				setID((String)newValue);
				return;
			case V3Package.STRUC_DOC_TH__LANGUAGE:
				setLanguage((String)newValue);
				return;
			case V3Package.STRUC_DOC_TH__ROWSPAN:
				setRowspan((String)newValue);
				return;
			case V3Package.STRUC_DOC_TH__SCOPE:
				setScope((ScopeType1)newValue);
				return;
			case V3Package.STRUC_DOC_TH__STYLE_CODE:
				setStyleCode((List<String>)newValue);
				return;
			case V3Package.STRUC_DOC_TH__VALIGN:
				setValign((ValignType)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case V3Package.STRUC_DOC_TH__MIXED:
				getMixed().clear();
				return;
			case V3Package.STRUC_DOC_TH__GROUP:
				getGroup().clear();
				return;
			case V3Package.STRUC_DOC_TH__CONTENT:
				getContent().clear();
				return;
			case V3Package.STRUC_DOC_TH__LINK_HTML:
				getLinkHtml().clear();
				return;
			case V3Package.STRUC_DOC_TH__SUB:
				getSub().clear();
				return;
			case V3Package.STRUC_DOC_TH__SUP:
				getSup().clear();
				return;
			case V3Package.STRUC_DOC_TH__BR:
				getBr().clear();
				return;
			case V3Package.STRUC_DOC_TH__FOOTNOTE:
				getFootnote().clear();
				return;
			case V3Package.STRUC_DOC_TH__FOOTNOTE_REF:
				getFootnoteRef().clear();
				return;
			case V3Package.STRUC_DOC_TH__RENDER_MULTI_MEDIA:
				getRenderMultiMedia().clear();
				return;
			case V3Package.STRUC_DOC_TH__ABBR:
				setAbbr(ABBR_EDEFAULT);
				return;
			case V3Package.STRUC_DOC_TH__ALIGN:
				unsetAlign();
				return;
			case V3Package.STRUC_DOC_TH__AXIS:
				setAxis(AXIS_EDEFAULT);
				return;
			case V3Package.STRUC_DOC_TH__CHAR:
				setChar(CHAR_EDEFAULT);
				return;
			case V3Package.STRUC_DOC_TH__CHAROFF:
				setCharoff(CHAROFF_EDEFAULT);
				return;
			case V3Package.STRUC_DOC_TH__COLSPAN:
				unsetColspan();
				return;
			case V3Package.STRUC_DOC_TH__HEADERS:
				setHeaders(HEADERS_EDEFAULT);
				return;
			case V3Package.STRUC_DOC_TH__ID:
				setID(ID_EDEFAULT);
				return;
			case V3Package.STRUC_DOC_TH__LANGUAGE:
				setLanguage(LANGUAGE_EDEFAULT);
				return;
			case V3Package.STRUC_DOC_TH__ROWSPAN:
				unsetRowspan();
				return;
			case V3Package.STRUC_DOC_TH__SCOPE:
				unsetScope();
				return;
			case V3Package.STRUC_DOC_TH__STYLE_CODE:
				setStyleCode(STYLE_CODE_EDEFAULT);
				return;
			case V3Package.STRUC_DOC_TH__VALIGN:
				unsetValign();
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case V3Package.STRUC_DOC_TH__MIXED:
				return mixed != null && !mixed.isEmpty();
			case V3Package.STRUC_DOC_TH__GROUP:
				return !getGroup().isEmpty();
			case V3Package.STRUC_DOC_TH__CONTENT:
				return !getContent().isEmpty();
			case V3Package.STRUC_DOC_TH__LINK_HTML:
				return !getLinkHtml().isEmpty();
			case V3Package.STRUC_DOC_TH__SUB:
				return !getSub().isEmpty();
			case V3Package.STRUC_DOC_TH__SUP:
				return !getSup().isEmpty();
			case V3Package.STRUC_DOC_TH__BR:
				return !getBr().isEmpty();
			case V3Package.STRUC_DOC_TH__FOOTNOTE:
				return !getFootnote().isEmpty();
			case V3Package.STRUC_DOC_TH__FOOTNOTE_REF:
				return !getFootnoteRef().isEmpty();
			case V3Package.STRUC_DOC_TH__RENDER_MULTI_MEDIA:
				return !getRenderMultiMedia().isEmpty();
			case V3Package.STRUC_DOC_TH__ABBR:
				return ABBR_EDEFAULT == null ? abbr != null : !ABBR_EDEFAULT.equals(abbr);
			case V3Package.STRUC_DOC_TH__ALIGN:
				return isSetAlign();
			case V3Package.STRUC_DOC_TH__AXIS:
				return AXIS_EDEFAULT == null ? axis != null : !AXIS_EDEFAULT.equals(axis);
			case V3Package.STRUC_DOC_TH__CHAR:
				return CHAR_EDEFAULT == null ? char_ != null : !CHAR_EDEFAULT.equals(char_);
			case V3Package.STRUC_DOC_TH__CHAROFF:
				return CHAROFF_EDEFAULT == null ? charoff != null : !CHAROFF_EDEFAULT.equals(charoff);
			case V3Package.STRUC_DOC_TH__COLSPAN:
				return isSetColspan();
			case V3Package.STRUC_DOC_TH__HEADERS:
				return HEADERS_EDEFAULT == null ? headers != null : !HEADERS_EDEFAULT.equals(headers);
			case V3Package.STRUC_DOC_TH__ID:
				return ID_EDEFAULT == null ? iD != null : !ID_EDEFAULT.equals(iD);
			case V3Package.STRUC_DOC_TH__LANGUAGE:
				return LANGUAGE_EDEFAULT == null ? language != null : !LANGUAGE_EDEFAULT.equals(language);
			case V3Package.STRUC_DOC_TH__ROWSPAN:
				return isSetRowspan();
			case V3Package.STRUC_DOC_TH__SCOPE:
				return isSetScope();
			case V3Package.STRUC_DOC_TH__STYLE_CODE:
				return STYLE_CODE_EDEFAULT == null ? styleCode != null : !STYLE_CODE_EDEFAULT.equals(styleCode);
			case V3Package.STRUC_DOC_TH__VALIGN:
				return isSetValign();
		}
		return super.eIsSet(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String toString() {
		if (eIsProxy()) return super.toString();

		StringBuffer result = new StringBuffer(super.toString());
		result.append(" (mixed: ");
		result.append(mixed);
		result.append(", abbr: ");
		result.append(abbr);
		result.append(", align: ");
		if (alignESet) result.append(align); else result.append("<unset>");
		result.append(", axis: ");
		result.append(axis);
		result.append(", char: ");
		result.append(char_);
		result.append(", charoff: ");
		result.append(charoff);
		result.append(", colspan: ");
		if (colspanESet) result.append(colspan); else result.append("<unset>");
		result.append(", headers: ");
		result.append(headers);
		result.append(", iD: ");
		result.append(iD);
		result.append(", language: ");
		result.append(language);
		result.append(", rowspan: ");
		if (rowspanESet) result.append(rowspan); else result.append("<unset>");
		result.append(", scope: ");
		if (scopeESet) result.append(scope); else result.append("<unset>");
		result.append(", styleCode: ");
		result.append(styleCode);
		result.append(", valign: ");
		if (valignESet) result.append(valign); else result.append("<unset>");
		result.append(')');
		return result.toString();
	}

} //StrucDocThImpl
